procedure TForm1.Button1Click(Sender: TObject);
var
  LoopAborted: Boolean;
  i: Integer;
begin
  LoopAborted := False;
  i := 0;
  repeat
    Caption := IntToStr(i);
    Application.ProcessMessages;
    if GetKeyState(VK_Escape) and 128 = 128 then
    begin
      LoopAborted := True;
      Break;
    end;
    Inc(i);
  until i = 100000;
  if LoopAborted then
    ShowMessage('User has aborted the loop!');
end; 